package persistencia.cv;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import persistence.DBManager;
import persistencia.SingletonDACBase;
import negocio.cliente.Industria;
import negocio.cv.*;

public class DAOReferenciaLaboral implements DAOInterface{

	private DBManager manager;
	private int idCV;
	private DateFormat dateFormat;

	public DAOReferenciaLaboral(DBManager manager,int idCV) {
		this.manager = manager;
		this.idCV=idCV;
		dateFormat = DateFormat
		.getDateInstance(DateFormat.SHORT);
	}
	@Override
	public void delete(Object b) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public ReferenciaLaboral get(String businessId) {
		return null;
	}

	/**
	 * Retorna todas las referencias laborales asociadas a un CV
	 * @param businessId
	 * @return
	 */
	public Collection getAll(String businessId) {
		LinkedList<ReferenciaLaboral> referencias  = new LinkedList<ReferenciaLaboral>();
		ResultSet rs = null;
		ReferenciaLaboral ref=null;
		Industria industria=null;
		Date fechaDesde=null,fechaHasta=null;
		Puesto puesto=null;
		DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.SHORT);
		int id=Integer.parseInt(businessId);
		String query;
	   
	        try {
	            query="SELECT T.idreferencialaboral, T.idindustria, T.idpuesto, T.razonsocial,T.domicilio," +
	            		"T.telefono,T.responsable,T.arearesponsable,DATE_FORMAT(T.fechadesde,'%e/%c/%Y'),DATE_FORMAT(T.fechahasta,'%e/%c/%Y')," +
	            		"T.motivodesvinculacion"
	                   +" FROM tesis.referencialaboral T where T.idcv="+id;
	          rs=manager.openQuery(query);  
	          
	          while(rs.next())
	          { 
	        	  industria=new DAOIndustria(manager).get(String.valueOf(rs.getInt(2)));
	        	  puesto=new DACPuesto(SingletonDACBase.tomarDACBase()).consultarPuesto(rs.getInt(3));
	        	  try {
	        		  
					fechaDesde = dateFormat.parse(rs.getObject(9).toString());
					fechaHasta = dateFormat.parse(rs.getObject(10).toString());
	  			} catch (ParseException e) {
	  				// TODO Auto-generated catch block
	  				e.printStackTrace();
	  			}
	              //Construyo una referencia loboral
	              ref=new ReferenciaLaboral(rs.getInt(1), rs.getObject(4).toString(),
	                       rs.getObject(5).toString(), rs.getObject(6).toString(),rs.getObject(7).toString(),
	                       rs.getObject(8).toString(),industria,fechaDesde,fechaHasta,rs.getObject(11).toString(),puesto);
	              //lo agrego en la coleccion que luego devolver
	              referencias.add(ref);          
	          }
	        }catch(SQLException e)
	        {
	        	e.printStackTrace();
	        }
	        return referencias; 
	    }
	
	

	@Override
	public int insert(Object b) {
		ResultSet rs = null;
		ReferenciaLaboral r=(ReferenciaLaboral)b;
		String query,fechaDesde,fechaHasta;
		int id=-1;
		try{
		fechaDesde=dateFormat.format(r.getFechaDesde());
		fechaHasta=dateFormat.format(r.getFechaHasta());
		  query= "select tesis.save_referencialaboral(NULL,"+r.getIndustria().getIdIndustria()+","+r.getPuesto().getIdPuesto()+",\'"+
		  r.getRazonsocial()+"\',\'"+r.getDomicilio()+"\',\'"+r.getTelefono()+"\',\'"+r.getResponsable()+"\',\'"+r.getAreaDeResponsable()+"\',\'"
		  +fechaDesde+"\',\'"+fechaHasta+"\',\'"+r.getMotivDesvinculacion()+"\',"+idCV+")"; 
        
        rs=manager.openQuery(query);
        rs.first();
        id=rs.getInt(1);
    } catch (SQLException ex) {
        ex.printStackTrace();
       
    }
    return id;
	}

//	 DECLARE      var_idreferencialaboral      INTEGER  DEFAULT pin_idreferencialaboral;
//	  DECLARE      var_idindustria            INT DEFAULT pin_idindustria ;
//	  DECLARE      var_idpuesto             INT DEFAULT pin_puesto;
//	  DECLARE      var_razonsocial                 VARCHAR(45) DEFAULT pin_razonsocial;
//	  DECLARE      var_domicilio                  VARCHAR(45) DEFAULT pin_domicilio ;
//	  DECLARE      var_telefono                  VARCHAR(12) DEFAULT pin_telefono;
//	  DECLARE      var_responsable             VARCHAR(45) DEFAULT pin_responsable;
//	  DECLARE      var_arearesponsable             VARCHAR(45) DEFAULT pin_arearesponsable;
//	  DECLARE      var_fechadesde                  DATE;
//	  DECLARE      var_fechahasta                  DATE;
//	  DECLARE      var_motivodedisvinculacion            VARCHAR(150) DEFAULT pin_motivodedisvinculacion;
//	  DECLARE      var_idcv  
	
	
	public void insertAll(List<ReferenciaLaboral> referencias, int idCV) {
		this.idCV=idCV;
		for(ReferenciaLaboral r:referencias)
		{
			r.setIdReferenciaLaboral(insert(r));
		}
	}
	@Override
	public void update(Object b) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public Collection getAll() {
		// TODO Auto-generated method stub
		return null;
	}
	public int getIdCV() {
		return idCV;
	}
	public void setIdCV(int idCV) {
		this.idCV = idCV;
	}

}
